INDEX | PREV | NEXT


                                    DC1
                             MAIN COMPILER PASS

 
 DC1 cppd_src_file [-o outfile] <options>

 DC1 is the compiler itself.  As input it requires an already
 preprocessed file and as output it produces assembly.  Many assemblers
 will not be able to assemble the output due to forward referenced REG
 labels and the PROCSTART, PROCEND directives.  The output is normally
 fed to DAS which generates the object file

 The compiler generates absolute-data references and absolute code
 references by default.  Do not confuse this with DCC's default, which
 is small-data and small-code.

 The compiler will put argument and auto variables into registers
 according to register availability and usage.  It will use A0-A1/D0-D1
 for register variables whenever possible.  Consequently, the most
 heavily used variables will be in registers even for very large
 subroutines.

 You should get into the habit of using auto declarations within sub
 blocks rather than declare all your autos at the top of the procedure.
 Apart from making the code more modular, this will enable the compiler
 to make better decisions when allocating register variables.

 The output of the compiler generates code of the same order as Aztec or
 Lattice C and, in many cases, makes better choices for register
 variables.  DCC makes much better use of address registers than either
 Aztec or Lattice.  However, it does not do any major contents tracking
 and redundant instructions will be generated.  DAS will handle properly
 optimizing branches and DAS will eventually have a peephole optimizer
 built in it to handle other obvious redundancies.

 The compiler does other optimizations itself, such as using bit
 instructions to handle special cases of &, |, and ^, include using
 BTST.

 IMPLEMENTATION NOTES

 'volatile' forces a data item NOT to be placed in a register.
 'register' is currently ignored.  'const' is ignored by default
 but will force objects into the code section given the -ms or -mS
 options (see below).  Other type and storage qualifiers are described
 in EXTENSIONS.DOC

 OPTIONS

 -S or -S0   set alternate section names 'libdata' and 'libbss'
 -Sd <name>  set section name for data sections
 -Sb <name>  set section name for bss sections
 -Sc <name>  set section name for code sections

 -SD <name>  set section name for __far data sections
 -SB <name>  set section name for __far bss sections

     The -S option allows you to modify the default section naming
     conventions.  DICE uses 'data', 'text', and 'bss' as defaults
     for the data, code, and bss sections.

     The DICE c.lib is compiled with -S and the startup code (c.o)
     references these first to force c.lib's data to come before
     program data.  The data ordering is then as follows:

     Library Initialized Data
     Program Initialized Data
     Library BSS Space
     Program BSS Space

     As long as the program does not declare more than 64KBytes of
     *INITIALIZED* data it can be linked with the small-data model
     c.lib ..  Thus, large-data-model programs that declare more
     than 64KBytes of BSS space will still link with the
     small-data-model c.lib

     This may be of no consequence because any __far declared data
     will be placed in a different data segment entirely... simply
     declare your large arrays as __far and the rest may remain
     small-data

 -d[#]

     Set debug mode.  This isn't pretty

 -E file
     specify stderr file, any errors are appended to the file
     instead of to stdout.  Useful for batch compiles


 -R

     Tells the compile to remove (delete) its input file
     specification when it no longer needs it.  The input file
     is usually a temporary preprocessor file and DCC will use
     this option to get DC1 to delete it as soon as possible.

 -proto

     The main compiler will generate errors for any unprototyped
     function call.

 -r
     Resident option.  The main compiler will generate special
     autoinit code to initialize data-data relocations.  This
     simplifies the work DLink and the startup module must do to
     support residentable programs.

 -v
     Verbose

 -o outfile

     Specify assembly output file name

 -mc     small-code model (DCC default)
 -mC     large-code model (DC1 default)
 -md     small-data model (DCC default)
 -mD     large-data model (DC1 default)
 -mw     absolute-word addressing (overides -md/-mD)
 -ma     absolute addressing (no effect on DC1 operation)

     These options specify the memory model.  The small-code model
     uses PC-relative addressing and the small-data model uses
     A4-relative addressing

     -mw is used when making ROMable code and specifies that the
     ABSOLUTE WORD addressing mode be used instead of either
     absolute long or A4-relative.   Absolute word addresses are
     resolved at link time.  THIS OPTION SHOULD NOT BE USED WHEN
        GENERATING EXECUTABLES MEANT TO RUN ON THE AMIGA.

    -ms0        (default) 'const' is ignored
    -ms     string constants and 'const' objs placed in code section
    -mS     string constants and 'const' objs placed in code section

        These options control how CONST data items are handled, including
        string constants such as char *ptr = "abcd";  The default is to
        ignore the const type qualifier.

        If -ms is specified string constants and CONST data items are
        placed in the code section.  Local references to CONST data
        items use PC-RELATIVE addressing.  Remote references (from other
        modules) to CONST data items use ABSOLUTE LONG addressing.

        -mS works the same as -ms but remote references are forced to
        use PC-RELATIVE addressing.  This can be dangerous and the
        final CODE size MUST BE LESS THAN 32KBYTES!!!!

        Usually it is safe to use -ms and, in fact, can save a lot of
        memory when combined with -r residentable programs because the
        string constants will not be duplicated for each running
        instance of the program.


Converted using GuideML V1.6, a converter written by Richard Körber <shred@chessy.aworld.de>